"use strict";
var EventDispatcher = /** @class */ (function () {
    function EventDispatcher() {
    }
    /**
     * 派发事件
     * @param type 事件类型
     * @param args 事件参数
     */
    EventDispatcher.dispatchEvent = function (type) {
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        var arr = this.eventList[type];
        if (arr) {
            arr.forEach(function (element) {
                element[0].apply(element[1], args);
                // listener.call(thisObject, args);
            });
        }
    };
    /**
     * 监听事件
     * @param type       事件类型
     * @param listener   回调函数
     * @param thisObject 回调执行对象
     */
    EventDispatcher.addEventListener = function (type, listener, thisObject) {
        var arr = this.eventList[type];
        if (!arr) {
            arr = [];
            this.eventList[type] = arr;
        }
        else {
            arr.forEach(function (element) {
                if (element[0] == listener && element[1] == thisObject) {
                    return;
                }
            });
        }
        arr.push([listener, thisObject]);
    };
    /**
     * 移除事件
     * @param type       事件类型
     * @param listener   回调函数
     * @param thisObject 回调执行对象
     */
    EventDispatcher.removeEventListener = function (type, listener, thisObject) {
        var arr = this.eventList[type];
        if (arr) {
            var len = arr.length;
            for (var i = len - 1; i >= 0; i--) {
                if (arr[i][0] == listener && arr[i][1] == thisObject) {
                    arr.splice(i, 1);
                }
            }
        }
        if (arr && arr.length == 0) {
            this.eventList[type] = null;
            delete this.eventList[type];
        }
    };
    /**事件列表*/
    EventDispatcher.eventList = {};
    return EventDispatcher;
}());
